import static org.junit.Assert.*;
import java.util.*;

import org.junit.Test;
import org.junit.Before;

/*
 * Este test ha sido diseñado para corroborar el correcto juncionamiento del método
 * ganador de la clase PuertoRico. Para ello hemos dado distintos valores a las
 * variables de los jugadores, comprobando que, en los momentos que corresponde, 
 * el método devuelve cierto o falso según si el jugador sobre el que preguntamos
 * es realmente el ganador o no. El test está correctamente implementado y el método
 * bajo testeo ha salido airoso de la prueba.
 */
public class ZZTestGanador {
	private static LinkedList<Jugador> jugadores = new LinkedList<Jugador>();
	private static Jugador jug1 = new Jugador("Pablo");
	private static Jugador jug2 = new Jugador("Zambomba acuática");
	private static Jugador jug3 = new Jugador("Daredevil");
	
	@Before
	public void setUpBeforeClass() throws Exception {		
		jugadores.add(jug1);
		jugadores.add(jug2);
		jugadores.add(jug3);		
	}	

	@Test
	public void testGanaPablo() {
		jug1.setPV(20000);
		jug2.setPV(2345);
		jug3.setPV(234);
		Jugador jug = ganador(jugadores);
		assertTrue (jug.getnombre()=="Pablo");		
	}

	@Test
	public void testNoGanaPablo() {
		jug1.setPV(2000);
		jug2.setPV(2345);
		jug3.setPV(234);
		Jugador jug = ganador(jugadores);
		assertFalse (jug.getnombre()=="Pablo");		
	}

	@Test
	public void testGanaZambomba() {
		jug1.setPV(2000);
		jug2.setPV(2345);
		jug3.setPV(234);
		Jugador jug = ganador(jugadores);
		assertTrue (jug.getnombre()=="Zambomba acuática");		
	}
	
	@Test
	public void testNoGanaZambomba() {
		jug1.setPV(20000);
		jug2.setPV(2345);
		jug3.setPV(234);
		Jugador jug = ganador(jugadores);
		assertFalse (jug.getnombre()=="Zambomba acuática");		
	}



	

	private Jugador ganador(LinkedList<Jugador> jugadores2) {
		Jugador winner = null;
		int tamano=jugadores.size(); // tamaño del array, osease el numero de jugadores
		int max= Integer.MIN_VALUE; // El peor maximo posible
		for (int i = 0; i < tamano; i++) {
			Jugador jug = (Jugador)jugadores.get(i);
			if (max<cuentaPv(jug)){
				max=cuentaPv(jug);
				winner=(Jugador)jugadores.get(i);
			}
		}
		return winner;
	}


	private int cuentaPv(Jugador jug) {
		return jug.getPV();
	}


	
}
